package net.joint_painting.shared.service;

import java.util.List;

import net.joint_painting.shared.model.Line;
import net.joint_painting.shared.model.Work;

import com.google.gwt.user.client.rpc.AsyncCallback;

/**
 * @author CAM
 * @version $Revision: 1.0 $
 */
public interface ServiceAsync {

    /**
     * Method drawLines.
     * 
     * @param lines
     *            List<Line>
     * @param callback
     *            AsyncCallback
     * 
     * @throws IllegalArgumentException
     */
    void drawLines(List<Line> lines, AsyncCallback callback)
	    throws IllegalArgumentException;

    /**
     * Method drawSurface.
     * 
     * @param id
     *            String
     * @param data
     *            String
     * @param callback
     *            AsyncCallback
     * 
     * @throws IllegalArgumentException
     */
    void drawSurface(String id, String data, AsyncCallback callback)
	    throws IllegalArgumentException;

    /**
     * Method getSurface.
     * 
     * @param id
     *            String
     * @param callback
     *            AsyncCallback<String>
     * 
     * @throws IllegalArgumentException
     */
    void getSurface(String id, AsyncCallback<String> callback)
	    throws IllegalArgumentException;

    /**
     * Method getUpdatedSurfaces.
     * 
     * @param callback
     *            AsyncCallback<List<String>>
     * 
     * @throws IllegalArgumentException
     */
    void getUpdatedSurfaces(AsyncCallback<List<String>> callback)
	    throws IllegalArgumentException;

    /**
     * Method getWork.
     * 
     * @param callback
     *            AsyncCallback<Work>
     * 
     * @throws IllegalArgumentException
     */
    void getWork(AsyncCallback<Work> callback) throws IllegalArgumentException;

    /**
     * Method sendWork.
     * 
     * @param work
     *            Work
     * @param callback
     *            AsyncCallback
     * 
     * @throws IllegalArgumentException
     */
    void sendWork(Work work, AsyncCallback callback)
	    throws IllegalArgumentException;

}
